using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections;
using System.Xml.Serialization;
using Trabalho.Biblioteca;
using Trabalho.Comum;

[WebService(Namespace = "http://net.ws")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    /**/public IAgrupamento agrupamento;

    public Service()
    {
        agrupamento = (IAgrupamento)Util.ConsumirServicoRemoting(
            typeof(IAgrupamento),
            Consts.NET_HOST,
            Consts.NET_AG_PORT,
            Consts.NET_AG_NAME);
        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    // Titulos
    [WebMethod]
    [XmlInclude(typeof(Titulo))]
    [XmlInclude(typeof(Criterio))]
    [XmlInclude(typeof(ValorCriterio))]
    [XmlInclude(typeof(Reserva))]
    [XmlInclude(typeof(Copia))]
    public ArrayList PesquisarTitulos(string inquerito)
    {
        ArrayList titulos = agrupamento.PesquisarTitulos(inquerito);
        ArrayList retorno = new ArrayList();
        
        foreach (Titulo titulo in titulos)
        {
            Titulo tit2 = new Titulo(titulo.descricao, titulo.catalogo, titulo.data);
            tit2.valores_criterio = titulo.valores_criterio;
            tit2.descricao = titulo.descricao;
            tit2.data = titulo.data;
            tit2.catalogo = titulo.catalogo;

            foreach (Reserva reserva in titulo.reservas)
            {
                Reserva res2 = new Reserva();
                res2.data = reserva.data;
            }
            foreach (Copia copia in titulo.copias)
            {
                Copia cop2 = new Copia();
                cop2.id = copia.id;
                cop2.em_viagem = copia.em_viagem;
                cop2.biblioteca_actual = new Biblioteca(copia.biblioteca_actual.nome);
                cop2.biblioteca_origem = new Biblioteca(copia.biblioteca_origem.nome);
                cop2.reserva = new Reserva();
                if (copia.reserva != null)
                    cop2.reserva.data = copia.reserva.data;
                cop2.mestre = copia.mestre;
                foreach(Consulta consulta in copia.consultas)
                {
                    if (cop2.EstaEmConsulta())
                    {
                        Consulta con2 = new Consulta();
                        con2.data = consulta.data;
                        con2.devolvido = consulta.devolvido;
                        cop2.consultas.Add(con2);
                    }
                }
                foreach (Emprestimo emprestimo in copia.emprestimos)
                {
                    if (cop2.EstaEmprestado())
                    {
                        Emprestimo emp2 = new Emprestimo();
                        emp2.data_inicio = emprestimo.data_inicio;
                        emp2.data_fim = emprestimo.data_fim;
                        emp2.devolvido = emprestimo.devolvido;
                        cop2.emprestimos.Add(emp2);
                    }
                }
                tit2.copias.Add(cop2);
            }
            retorno.Add(tit2);
        }
        return retorno;
    }

    // Membros
    [WebMethod]
    [XmlInclude(typeof(Membro))]
    public ArrayList PesquisarMembros(string nome)
    {
        ArrayList membros = agrupamento.PesquisarMembros(nome);
        ArrayList retorno = new ArrayList();
        foreach (Membro membro in membros)
        {
            Membro mem2 = new Membro(membro.nome, membro.morada, membro.telefone, null);
            mem2.data_termino_mensalidade = membro.data_termino_mensalidade;
            mem2.biblioteca = new Biblioteca(membro.biblioteca.nome);
            retorno.Add(mem2);
        }
        return retorno;
    }
}
